﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Portal.Core.DAL;
using System.ComponentModel;

namespace Portal.BO.Editoral.Statistic
{
    public static class StatCategoryHelper
    {
        [DataObjectMethod(DataObjectMethodType.Select)]
        public static DataTable GetCategoryList() 
        {
            DataTable dtCat = new DataTable();
            DataTable objresult = new DataTable();
            DataTable dtz = new DataTable();
            DataTable dt3 = new DataTable();
            DataTable objTable;
            object[] objarr = null;
            Portal.Core.DAL.MainDB objDbCore = new Portal.Core.DAL.MainDB();
            try
            {
                using (LogCMS.DAL.MainDB objDb = new LogCMS.DAL.MainDB())
                {
                    //dtCat = objDbCore.CategoryCollection.GetAsDataTable(" Cat_ParentID = 0 ", ""); ;
                    dtCat = objDbCore.FrontEndStoreProcedure.Category_GetListByWhere(" Where (Cat_ParentID = 0 or Cat_ParentID is null) ", "");
                    dtCat.Columns.Add(new DataColumn("ViewCount"));
                    dtCat.Columns.Add(new DataColumn("Wait_Edit_Content_Count"));
                    dtCat.Columns.Add(new DataColumn("Wait_Approve_Content_Count"));
                    dtCat.Columns.Add(new DataColumn("Approved_Content_Count"));

                    objresult = dtCat.Clone();
                    string startDate = "20070101";
                    string endDate = DateTime.Today.AddDays(1).ToString("yyyyMMdd") ;
                    foreach (DataRow objrow in dtCat.Rows)
                    {
                        objarr = objrow.ItemArray;

                        // Lấy thống kê tổng lượt đọc của chuyên mục chính
                        dtz = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_View).ToString(), startDate, "'" + objrow[0].ToString() + "'", "");
                        if (dtz.Rows.Count > 0)
                            objarr[objarr.Length - 4] = dtz.Rows[0][0].ToString();
                        else
                            objarr[objarr.Length - 4] = "0";

                        // Lấy thống kê số của chuyên mục đang ở status = Wait_Edit_Content
                        dtz = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_Wait_Edit_Content).ToString(), startDate, "'" + objrow[0].ToString() + "'", "");
                        if (dtz.Rows.Count > 0)
                            objarr[objarr.Length - 3] = dtz.Rows[0][0].ToString();
                        else
                            objarr[objarr.Length - 3] = "0";

                        // Lấy thống kê số của chuyên mục đang ở status = Wait_Approve_Content
                        dtz = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_Wait_Approve_Content).ToString(), startDate, "'" + objrow[0].ToString() + "'", "");
                        if (dtz.Rows.Count > 0)
                            objarr[objarr.Length - 2] = dtz.Rows[0][0].ToString();
                        else
                            objarr[objarr.Length - 2] = "0";

                        // Lấy thống kê số của chuyên mục đang ở status = Approved_Content
                        dtz = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_Approved_Content).ToString(), startDate, "'" + objrow[0].ToString() + "'", "");
                        if (dtz.Rows.Count > 0)
                            objarr[objarr.Length - 1] = dtz.Rows[0][0].ToString();
                        else
                            objarr[objarr.Length - 1] = "0";

                        objresult.Rows.Add(objarr);

                        // Get cac chuyen muc con
                        //dtz = objDbCore.CategoryCollection.GetAsDataTable(" Cat_ParentID = " + objrow["Cat_ID"], "");
                        dtz = objDbCore.FrontEndStoreProcedure.Category_GetListByWhere(" Where Cat_ParentID = " + objrow["Cat_ID"],"");
                        dtz.Columns.Add(new DataColumn("ViewCount"));
                        dtz.Columns.Add(new DataColumn("Wait_Edit_Content_Count"));
                        dtz.Columns.Add(new DataColumn("Wait_Approve_Content_Count"));
                        dtz.Columns.Add(new DataColumn("Approved_Content_Count"));

                        foreach (DataRow drz in dtz.Rows)
                        {
                            drz["Cat_Name"] = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + drz["Cat_Name"];
                            objarr = drz.ItemArray;

                            // Lấy thống kê tổng lượt đọc của chuyên mục con
                            objTable = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_View).ToString(), startDate, "'" + drz[0].ToString() + "'", "");
                            if (objTable.Rows.Count > 0)
                                objarr[objarr.Length - 4] = objTable.Rows[0][0].ToString();
                            else
                                objarr[objarr.Length - 4] = "0";

                            // Lấy thống kê số của chuyên mục đang ở status = Wait_Edit_Content
                            objTable = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_Wait_Edit_Content).ToString(), startDate, "'" + drz[0].ToString() + "'", "");
                            if (dtz.Rows.Count > 0)
                                objarr[objarr.Length - 3] = objTable.Rows[0][0].ToString();
                            else
                                objarr[objarr.Length - 3] = "0";

                            // Lấy thống kê số của chuyên mục đang ở status = Wait_Approve_Content
                            objTable = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_Wait_Approve_Content).ToString(), startDate, "'" + drz[0].ToString() + "'", "");
                            if (dtz.Rows.Count > 0)
                                objarr[objarr.Length - 2] = objTable.Rows[0][0].ToString();
                            else
                                objarr[objarr.Length - 2] = "0";

                            // Lấy thống kê số của chuyên mục đang ở status = Approved_Content
                            objTable = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_Approved_Content).ToString(), startDate, "'" + drz[0].ToString() + "'", "");
                            if (dtz.Rows.Count > 0)
                                objarr[objarr.Length - 1] = objTable.Rows[0][0].ToString();
                            else
                                objarr[objarr.Length - 1] = "0";

                            objresult.Rows.Add(objarr);

                            #region Chuyen muc con cap 3
                            // Get cac chuyen muc con cap 3
                            //dt3 = objDbCore.CategoryCollection.GetAsDataTable(" Cat_ParentID = " + drz["Cat_ID"], "");
                            dt3 = objDbCore.FrontEndStoreProcedure.Category_GetListByWhere(" Where Cat_ParentID = " + drz["Cat_ID"], "");
                            if(dt3.Rows.Count > 0)
                            {
                                dt3.Columns.Add(new DataColumn("ViewCount"));
                                dt3.Columns.Add(new DataColumn("Wait_Edit_Content_Count"));
                                dt3.Columns.Add(new DataColumn("Wait_Approve_Content_Count"));
                                dt3.Columns.Add(new DataColumn("Approved_Content_Count"));

                                foreach (DataRow dr3 in dt3.Rows)
                                {
                                    dr3["Cat_Name"] = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + dr3["Cat_Name"];
                                    objarr = dr3.ItemArray;

                                    // Lấy thống kê tổng lượt đọc của chuyên mục con
                                    objTable = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_View).ToString(), startDate, "'" + dr3[0].ToString() + "'", "");
                                    if (objTable.Rows.Count > 0)
                                        objarr[objarr.Length - 4] = objTable.Rows[0][0].ToString();
                                    else
                                        objarr[objarr.Length - 4] = "0";

                                    // Lấy thống kê số của chuyên mục đang ở status = Wait_Edit_Content
                                    objTable = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_Wait_Edit_Content).ToString(), startDate, "'" + dr3[0].ToString() + "'", "");
                                    if (dt3.Rows.Count > 0)
                                        objarr[objarr.Length - 3] = objTable.Rows[0][0].ToString();
                                    else
                                        objarr[objarr.Length - 3] = "0";

                                    // Lấy thống kê số của chuyên mục đang ở status = Wait_Approve_Content
                                    objTable = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_Wait_Approve_Content).ToString(), startDate, "'" + dr3[0].ToString() + "'", "");
                                    if (dt3.Rows.Count > 0)
                                        objarr[objarr.Length - 2] = objTable.Rows[0][0].ToString();
                                    else
                                        objarr[objarr.Length - 2] = "0";

                                    // Lấy thống kê số của chuyên mục đang ở status = Approved_Content
                                    objTable = objDb.StoredProcedures.Stats_GetReportSum(endDate, "", ((int)CountKey.Category_Approved_Content).ToString(), startDate, "'" + dr3[0].ToString() + "'", "");
                                    if (dt3.Rows.Count > 0)
                                        objarr[objarr.Length - 1] = objTable.Rows[0][0].ToString();
                                    else
                                        objarr[objarr.Length - 1] = "0";

                                    objresult.Rows.Add(objarr);
                                }
                            }
                            #endregion


                        }
                    }
                }
            }
            catch {
            }
            
            dtCat.Dispose();
            dtz.Dispose();
            return objresult;
        }
    }
}
